home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / OffScreenCanvas3D / PrintFromButton.java.z / PrintFromButton.java
Encoding:
Java Source  |  2003-08-08  |  5.0 KB  |  167 lines

  1. /*
  2.  *    @(#)PrintFromButton.java 1.12 02/10/21 13:46:53
  3.  *
  4.  * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. import com.sun.j3d.utils.geometry.ColorCube;
  41. import java.applet.Applet;
  42. import java.awt.*;
  43. import java.awt.event.*;
  44. import java.awt.image.BufferedImage;
  45. import com.sun.j3d.utils.applet.MainFrame;
  46. import com.sun.j3d.utils.universe.*;
  47. import javax.media.j3d.*;
  48. import javax.vecmath.*;
  49.  
  50. /**
  51.  * PrintFromButton tests renderOffScreenBuffer from a button
  52.  */
  53. public class PrintFromButton extends Applet implements ActionListener {
  54.  
  55.   OffScreenCanvas3D c;
  56.  
  57.     private SimpleUniverse u = null;
  58.  
  59.   public BranchGroup createSceneGraph(Raster drawRaster)
  60.   {
  61.     // Create the root of the branch graph
  62.     BranchGroup objRoot = new BranchGroup();
  63.  
  64.     // spin object has composited transformation matrix
  65.     Transform3D spin = new Transform3D();
  66.     Transform3D tempspin = new Transform3D();
  67.  
  68.     spin.rotX(Math.PI/4.0d);
  69.     tempspin.rotY(Math.PI/5.0d);
  70.     spin.mul(tempspin);
  71.     spin.setScale(0.7);
  72.     spin.setTranslation(new Vector3d(-0.4, 0.3, 0.0));
  73.  
  74.     TransformGroup objTrans = new TransformGroup(spin);
  75.     objRoot.addChild(objTrans);
  76.  
  77.     // Create a simple shape leaf node, add it to the scene graph.
  78.     // ColorCube is a Convenience Utility class
  79.     objTrans.addChild(new ColorCube(0.4));
  80.  
  81.     //Create a raster obj
  82.     Shape3D shape = new Shape3D(drawRaster);
  83.     objRoot.addChild(shape);
  84.  
  85.     // Let Java 3D perform optimizations on this scene graph.
  86.     objRoot.compile();
  87.  
  88.     return objRoot;
  89.   }
  90.  
  91.   public PrintFromButton ()
  92.   {
  93.   }
  94.  
  95.     public void init() {
  96.     setLayout(new BorderLayout());
  97.     GraphicsConfiguration config =
  98.         SimpleUniverse.getPreferredConfiguration();
  99.     
  100.     BufferedImage bImage = new BufferedImage(200, 200 ,
  101.                          BufferedImage.TYPE_INT_ARGB);
  102.  
  103.     ImageComponent2D buffer =
  104.         new ImageComponent2D(ImageComponent.FORMAT_RGBA, bImage);
  105.     buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ);
  106.  
  107.     Raster drawRaster = new Raster(new Point3f(0.0f, 0.0f, 0.0f),
  108.                        Raster.RASTER_COLOR,
  109.                        0, 0, 200, 200, buffer, null);
  110.     
  111.     drawRaster.setCapability(Raster.ALLOW_IMAGE_WRITE);
  112.     
  113.     // create the main scene graph
  114.     BranchGroup scene = createSceneGraph(drawRaster);
  115.     
  116.     // create the on-screen canvas
  117.     Canvas3D d = new Canvas3D(config, false);
  118.     add("Center", d);
  119.     
  120.     // create a simple universe
  121.     u = new SimpleUniverse(d);
  122.     
  123.     // This will move the ViewPlatform back a bit so the
  124.     // objects in the scene can be viewed.
  125.     u.getViewingPlatform().setNominalViewingTransform();
  126.     
  127.     
  128.     // create an off Screen Buffer
  129.     
  130.     c = new OffScreenCanvas3D(config, true, drawRaster);
  131.     
  132.     // set the offscreen to match the onscreen
  133.     Screen3D sOn = d.getScreen3D();
  134.     Screen3D sOff = c.getScreen3D();
  135.     sOff.setSize(sOn.getSize());
  136.     sOff.setPhysicalScreenWidth(sOn.getPhysicalScreenWidth());
  137.     sOff.setPhysicalScreenHeight(sOn.getPhysicalScreenHeight());
  138.     
  139.     // attach the same view to the offscreen canvas
  140.     u.getViewer().getView().addCanvas3D(c);
  141.     
  142.     // create the gui
  143.     Button b = new Button ("Print");
  144.     b.addActionListener(this);
  145.     Panel p = new Panel();
  146.     p.add(b);
  147.     add("North", p);
  148.     
  149.     u.addBranchGraph(scene);
  150.     }
  151.  
  152.     public void destroy() {
  153.     u.cleanup();
  154.     }
  155.   
  156.   public void actionPerformed(ActionEvent e)
  157.   {
  158.     // perform the print action
  159.     c.print(false);
  160.   }
  161.   
  162.   public static void main(String argv[])
  163.   {
  164.     new MainFrame(new PrintFromButton(), 500, 500);
  165.   }
  166. }
  167.